﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

using AppPriceLive.Entities.Utils;
using AppPriceLive.Entities.Models;
using AppPriceLive.DAL;
using AppPriceLive.Common;

namespace PriceLiveService
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        #region Users
        [WebMethod(Description = "Hàm trả về kiểu Bool kiểm tra sự tồn tại của UserName: True->Tồn tại; False->Không tồn tại")]
        public bool CheckUser(string UserName)
        {
            bool re = false;
            try
            {
                if (new UsersDAO().Select(UserName).UserName == UserName)
                    re = true;
            }
            catch 
            {
                re = false;
            }
            return re;
        }

        [WebMethod(Description = "Hàm trả về đối tượng UsersInfo: giá trị Null -> userName hoặc password không chính xác ")]
        public virtual UsersInfo UserAuth(string userName, string password)
        {
            try
            {
                return new UsersDAO().UserAuth(userName, password);
            }
            catch
            {
                return null;
            }
        }

        [WebMethod(Description = "Hàm trả về kiểu int Insert User - Register: Return=1-> Thành công; Return=0-> Thất bại")]
        public int UsersInsert(string UserName, string Password, string Email, string PhoneNo, string DeviceId, string Status, string RegisterDate)
        {
            int re = 0;
            try
            {
                UsersInfo usersInfo = new UsersInfo();
                usersInfo.UserName = UserName;
                usersInfo.Password = Password;
                usersInfo.Email = Email;
                usersInfo.PhoneNo = PhoneNo;
                usersInfo.DeviceId = DeviceId;
                usersInfo.Status = int.Parse(Status);
                usersInfo.RegisterDate = DateTime.Parse(RegisterDate);

                new UsersDAO().Insert(usersInfo);
                re = 1; // Thành công
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.Users - Insert", ex);
                re = 0; // Không thành công
            }
            return re;
        }
        #endregion

        #region CurrencyGroup
        [WebMethod(Description = "Hàm trả về kiểu đối tượng CurrencyGroupInfo: Select 1 bản ghi trong nhóm")]
        public virtual CurrencyGroupInfo CurrencyGroupSelect(int? currencyGroupId)
        {
            try
            {
                return new CurrencyGroupDAO().Select(currencyGroupId);
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.CurrencyGroup - Select", ex);
                throw;
            }

        }

        [WebMethod(Description = "Hàm trả về kiểu List: Select tất cả các nhóm: Kim quý; Dầu mỏ; Vàng Việt Nam ...")]
        public List<CurrencyGroupInfo> CurrencyGroupSelectAll()
        {
            try
            {
                return new CurrencyGroupDAO().SelectAll();
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.CurrencyGroup - SelectAll", ex);
                throw;
            }

        }
        #endregion

        #region VCurrencyListInfo
        [WebMethod(Description = "Hàm trả về đối tượng VCurrencyListInfoInfo: Select 1 bản ghi theo currenListId")]
        public virtual VCurrencyListInfoInfo VCurrencyListInfoSelectWithCurrenListId(int? currenListId)
        {
            try
            {
                return new VCurrencyListInfoDAO().VCurrencyListInfoSelectWithCurrenListId(currenListId);
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.VCurrencyListInfo - VCurrencyListInfoSelectWithCurrenListId", ex);
                throw;
            }
        }

        [WebMethod(Description = "Hàm trả về kiểu list: Select VCurrencyListInfo theo currencyGroupId")]
        public List<VCurrencyListInfoInfo> VCurrencyListInfoSelectWithCurrencyGroupId(int? currencyGroupId)
        {
            try
            {
                return new VCurrencyListInfoDAO().VCurrencyListInfoSelectWithCurrencyGroupId(currencyGroupId);
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.VCurrencyListInfo - VCurrencyListInfoSelectWithCurrencyGroupId", ex);
                throw;
            }

        }

        [WebMethod(Description = "Hàm trả về kiểu list: Select all VCurrencyListInfoSelectAll")]
        public List<VCurrencyListInfoInfo> VCurrencyListInfoSelectAll()
        {
            try
            {
                return new VCurrencyListInfoDAO().VCurrencyListInfoSelectAll();
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.VCurrencyListInfo - VCurrencyListInfoSelectAll", ex);
                throw;
            }

        }
        #endregion

        #region ImagePR - Bảng lưu hình ảnh quảng cáo
        [WebMethod(Description = "Hàm trả về kiểu đối tượng ImagePR - Hình ảnh quảng cáo: 1 bản ghi theo DateQuery")]
        public virtual ImagePRInfo ImagePRSelectDateQuery(string DateQuery)
        {
            try
            {
                return new ImagePRDAO().SelectDateQuery(DateTime.Parse(DateQuery));
            }
            catch (Exception ex)
            {
                Logger.Error("AppPriceLive.Biz.ImagePR - SelectDateQuery", ex);
                throw;
            }

        }
        
        #endregion

        #region Send mail
        [WebMethod (Description = "Hàm trả về kiểu bool: true -> gửi thành công và ngược lại")]
        public bool MailMessageSender(string ToEmail, string Subject, string Body)
        {
            string EmailName = ConfigurationManager.AppSettings["EmailName"];
            string Password = ConfigurationManager.AppSettings["Password"];

            // Smtp configuration
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Credentials = new NetworkCredential(EmailName, Password);
            smtpClient.Port = int.Parse(ConfigurationManager.AppSettings["PortNo"]);
            smtpClient.Host = ConfigurationManager.AppSettings["HostName"];
            smtpClient.EnableSsl = bool.Parse(ConfigurationManager.AppSettings["EnableSsl"]);

            MailMessage mailMessage = new MailMessage();
            try
            {
                mailMessage.From = new MailAddress(EmailName);
                mailMessage.To.Add(ToEmail);
                mailMessage.Subject = Subject;
                mailMessage.Body = Body;

                mailMessage.IsBodyHtml = true;
                mailMessage.BodyEncoding = Encoding.UTF8;
                mailMessage.Priority = MailPriority.Normal;
                mailMessage.ReplyTo = new MailAddress(EmailName);

                smtpClient.Send(mailMessage);
                return true;
            }
            catch (Exception ex) {
                return false; }
        }

        [WebMethod (Description = "Hàm feedback của khách hàng trả về kiểu bool: true -> gửi thành công và ngược lại")]
        public bool FeedbackSender(string Email, string Subject, string Body)
        {
            string EmailName = ConfigurationManager.AppSettings["EmailName"];
            string Password = ConfigurationManager.AppSettings["Password"];

            // Smtp configuration
            SmtpClient smtpClient = new SmtpClient();
            smtpClient.Credentials = new NetworkCredential(EmailName, Password);
            smtpClient.Port = int.Parse(ConfigurationManager.AppSettings["PortNo"]);
            smtpClient.Host = ConfigurationManager.AppSettings["HostName"];
            smtpClient.EnableSsl = bool.Parse(ConfigurationManager.AppSettings["EnableSsl"]);

            MailMessage mailMessage = new MailMessage();
            try
            {
                mailMessage.From = new MailAddress(EmailName);
                mailMessage.To.Add(EmailName);
                mailMessage.Subject = Subject;
                mailMessage.Body = Body + "<br><br>Email khách hàng: " + Email;

                mailMessage.IsBodyHtml = true;
                mailMessage.BodyEncoding = Encoding.UTF8;
                mailMessage.Priority = MailPriority.Normal;
                mailMessage.ReplyTo = new MailAddress(EmailName);

                smtpClient.Send(mailMessage);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        #endregion
    }
}
